package cliente;

import java.sql.SQLException;
import java.util.Collection;

import cliente.exception.ExceptionCPFInvalido;
import cliente.exception.ExceptionCampoVazio;
import cliente.exception.ExceptionPessoaJaCadastrada;
import cliente.exception.PessoaNaoEncontradaException;



public class CadastroCliente {
	
	private IRepositorioCliente reposCliente = new RepositorioBD();
		
		/*public void pesquisarCliente(Cliente clientePesquisa){
		pesquisarCliente(clientePesquisa);
			}*/
		public IRepositorioCliente getRespoCliente() {
			return reposCliente;
		}
		public void setRespoCliente(IRepositorioCliente respoCliente) {
			this.reposCliente = respoCliente;
		}
		
		public void inserirCliente(Cliente cli) throws ExceptionCampoVazio, ClassNotFoundException, SQLException, ExceptionCPFInvalido, ExceptionPessoaJaCadastrada{
			
			if(cli.getNomeCliente().trim().equals("")){
				throw new ExceptionCampoVazio("Nome");
			}
			if(cli.getIdentidade().trim().equals("")){
				throw new ExceptionCampoVazio("Identidade");
			}
			if(cli.getCpf().trim().equals("")){
				throw new ExceptionCampoVazio("CPF");
			}
			if(!cpf(cli.getCpf())){
			
				throw new ExceptionCPFInvalido();
			}
			reposCliente.CadastrarCliente(cli);
		}
		
		public Cliente PesquisarCliente(String cpf) throws PessoaNaoEncontradaException, ClassNotFoundException, SQLException{
			Cliente cliente = reposCliente.PesquisarCliente(cpf);
			if(cliente == null){
				throw new PessoaNaoEncontradaException();
			}
			return cliente;
		}
		
		public void ExcluirCliente(String nome, String cpf) throws PessoaNaoEncontradaException, ClassNotFoundException, SQLException{
			System.out.println(cpf);
			Cliente cln = PesquisarCliente(cpf);
			
			if(cln == null){
				throw new PessoaNaoEncontradaException();
			}
			reposCliente.ExcluirCliente(cln);
		}
		
		public void AlterarCliente(Cliente client) throws ClassNotFoundException, SQLException, ExceptionCampoVazio{
			if(client.getNomeCliente().trim().equals("")){
				throw new ExceptionCampoVazio("Nome");
			}
			if(client.getIdentidade().trim().equals("")){
				throw new ExceptionCampoVazio("Identidade");
			}
			if(client.getCpf().trim().equals("")){
				throw new ExceptionCampoVazio("CPF");
			}
			
			reposCliente.AlterarCliente(client);
		}
		public Collection<Cliente> Pesqtudo() throws ClassNotFoundException, SQLException{
			return reposCliente.Pesqtudo();
		}
		public boolean cpf(String cpf){
			
			  int a,b,c,d,e,f,g,h,i,d1,d2,cpfd1, cpfd2;  
		      boolean digito1 = false, digito2 = false, cpfValido = false;
		      String A,B,C,D,E,F,G,H,I,D1,D2;
		      
		      	 A = cpf.substring(0,1);
		         B = cpf.substring(1,2);
		         C = cpf.substring(2,3);
		         D = cpf.substring(4,5);
		         E = cpf.substring(5,6);
		         F = cpf.substring(6,7);
		         G = cpf.substring(8,9);
		         H = cpf.substring(9,10);
		         I = cpf.substring(10,11);
		         D1 = cpf.substring(12,13);
		         D2 = cpf.substring(13,14);
		         
		         
		         a = Integer.parseInt(A);
		         b = Integer.parseInt(B);
		         c = Integer.parseInt(C);
		         d = Integer.parseInt(D);
		         e = Integer.parseInt(E);
		         f = Integer.parseInt(F);
		         g = Integer.parseInt(G);
		         h = Integer.parseInt(H);
		         i = Integer.parseInt(I);
		         d1 = Integer.parseInt(D1);
		         d2 = Integer.parseInt(D2);
			
		         
		         cpfd1 = (((a*10) + (b*9) + (c*8) + (d*7) + (e*6) + (f*5) + (g*4) + (h*3) + (i*2)) % 11 );
		         //cpfd2 = (((d1*11) + (i*10) + (h*9) + (g*8) + (f*7) + (e*6) + (d*5) + (c*4) + (b*3) + (a*2))%11);
		         //036.211.079-40
		         cpfd2 = (((a*11) + (b*10) + (c*9) + (d*8) + (e*7) + (f*6) + (g*5) + (h*4) + (i*3) + (d1*2))%11);
		         System.out.println(cpfd1);
		         
		         if(cpfd1 < 2){
		          	cpfd1 = 0;
		          }
		          if(cpfd2 < 2){
		          	cpfd2 = 0;
		          }
		          System.out.println(cpfd1);
		          if((11-cpfd1) == d1){
		           	digito1 = true;
		           }
		           
		           if((11-cpfd2) == d2){	
		           	digito2 = true;
		           }
		           
		           
		           if(digito1 == true && digito2 == true){
		        	   cpfValido = true;
		           }else 
		        	   cpfValido = false;
		           
		           if(a == 1 || b == 1 || c == 1 || d == 1 || e == 1 || f == 1 || g == 1 || h == 1 || i == 1){
		        	   cpfValido = false;
		           }if(a == 2 || b == 2 || c == 2 || d == 2 || e == 2 || f == 2 || g == 2 || h == 2 || i == 2){
		        	   cpfValido = false;
		           }if(a == 3 || b == 3 || c == 3 || d == 3 || e == 3 || f == 3 || g == 3 || h == 3 || i == 3){
		        	   cpfValido = false;
		           }if(a == 4 || b == 4 || c == 4 || d == 4 || e == 4 || f == 4 || g == 4 || h == 4 || i == 4){
		        	   cpfValido = false;
		           }if(a == 5 || b == 5 || c == 5 || d == 5 || e == 5 || f == 5 || g == 5 || h == 5 || i == 5){
		        	   cpfValido = false;
		           }if(a == 6 || b == 6 || c == 6 || d == 6 || e == 6 || f == 6 || g == 6 || h == 6 || i == 6){
		        	   cpfValido = false;
		           }if(a == 7 || b == 7 || c == 7 || d == 7 || e == 7 || f == 7 || g == 7 || h == 7 || i == 7){
		        	   cpfValido = false;
		           }if(a == 8 || b == 8 || c == 8 || d == 8 || e == 8 || f == 8 || g == 8 || h == 8 || i == 8){
		        	   cpfValido = false;
		           }if(a == 9 || b == 9 || c == 9 || d == 9 || e == 9 || f == 9 || g == 9 || h == 9 || i == 9){
		        	   cpfValido = false;
		           }if(a == 0 || b == 0 || c == 0 || d == 0 || e == 0 || f == 0 || g == 0 || h == 0 || i == 0){
		        	   cpfValido = false;
		           }
		           
		           return cpfValido;
		}
		
		public String pegarcod() throws ClassNotFoundException, SQLException{
			return reposCliente.pegarcod();
		}
		
		public Cliente pesqnome(String nome) throws ClassNotFoundException, SQLException{
			return reposCliente.Pesqnome(nome);
		}
		
		public Collection<Cliente> pesqtudocli(String cpf) throws SQLException, ClassNotFoundException{
		return reposCliente.pesqtudocpf(cpf);	
		}
		
}
